
/*
  Name: 循环队列 
  Copyright: BTC 2004
  Author: Zhuang Bo
  Date: 2004
  Description:
     [Include] 
        ds.h
     [Constants]
        MAXQSIZE
     [Types]
        ElemType
        SqQueue
     [Functions]
        InitQueue(&Q)
        QueueEmpty(Q)
        QueueLength(Q)
        EnQueue(&Q,e)
        DeQueue(&Q,&e)
*/

#ifndef SQQUEUE_H_INCLUDED
#define SQQUEUE_H_INCLUDED /* 防止重复包含 */

//////////////////////////////////////////
//包含头文件 
#include <stdlib.h>
#include "ds.h" // OK, Status 等定义 


//数据元素的类型(默认使用int型)
#ifndef ElemType
#define ElemType int
#define USE_DEFAULT_ELEMTYPE 
#endif //ElemType


//////////////////////////////////////////
//循环队列的存储结构 

#define MAXQSIZE 64 /* 循环队列的最大容量 */
typedef struct {
    ElemType elem[MAXQSIZE]; //NOTE: 这里使用了数组 
    int front, rear;
} SqQueue;


//////////////////////////////////////////
//循环队列的基本操作 

//构造一个空队列Q
Status InitQueue(SqQueue &Q)
{
    /* TODO (#1#): 初始化队列为空 */
    return ERROR;
    //....................................
}

//若队列Q为空，则返回TRUE，否则FALSE 
//  前提：队列Q已存在
Status QueueEmpty(SqQueue Q)
{
    /* TODO (#1#): 判断队列是否为空 */
    return FALSE;
    //....................................
}

//返回队列Q的元素个数，即队列长度
//  前提：队列Q已存在 
int QueueLength(SqQueue Q)
{
    /* TODO (#2#): 返回队列长度 */
    return 0;
    //....................................
}

//插入元素e作为队列Q的新的队尾元素
//  前提：队列Q存在且未满
Status EnQueue(SqQueue &Q, ElemType e)
{
    /* TODO (#1#): 元素e入队列 */
    return ERROR;//返回操作状态(成功:OK,失败:ERROR)
    //....................................
}

//删除队列Q的队头元素，并用e返回 
//  前提：队列Q存在且非空 
Status DeQueue(SqQueue &Q, ElemType &e)
{
    /* TODO (#1#): 出队列存入e */
    return ERROR;//返回操作状态(成功:OK,失败:ERROR)
    //....................................
}

//////////////////////////////////////////


//取消ElemType的默认定义，以免影响其它部分 
#ifdef USE_DEFAULT_ELEMTYPE
#undef ElemType
#undef USE_EFAULT_ELEMTYPE
#endif

#endif //SQQUEUE_H_INCLUDED

